基本图形绘制

最后更新时间:2019年6月17日

基本图形包括点、线、多边形、圆、文本、图像等,实现的原理类似:构造完覆盖物图形对象后进行绘制。

1 点图形 Sample详情

(1)单点

首先构建单点覆盖物图形对象。

//创建点图形对象
GraphicPoint graphicPoint = new GraphicPoint();
Dot dot = new Dot(12729985, 3606886);              //地图点坐标
graphicPoint.setPoint(dot);                        //设置点的位置
graphicPoint.setSize(15);                          //设置点大小
graphicPoint.setColor(Color.argb(127,255,0,255));  //设置点颜色

单点图形覆盖物对象构造完成后,就需要将其添加到覆盖物图层中进行渲染绘制,后续多种覆盖物图形的绘制同样需要经过此操作。

//方法一:将点图形添加到地图容器缺省的覆盖物图层中
mapView.getGraphicsOverlay().addGraphic(graphicPoint);

//方法二:新建覆盖物图层,添加到覆盖物图层列表中
GraphicsOverlay graphicsOverlay=new GraphicsOverlay();
graphicsOverlay.addGraphic(graphicPoint);     //添加覆盖物到自定义覆盖物图层中
mapView.getGraphicsOverlays().add(graphicsOverlay);

//必须刷新地图容器才能看到绘制效果
mapView.refresh();                        

单点图形.jpg

(2)多点

多点是将多个点图形作为一个对象处理的,它们是一个整体,具有相同的颜色,一样的大小。

//点坐标(地图坐标)
Dot dot1 = new Dot(12697530, 3593327);
Dot dot2 = new Dot(12736224, 3570660);
Dot dot3 = new Dot(12766215, 3612566);
Dot[] dots = {dot1,dot2,dot3};

//实例化多点图形对象
GraphicMultiPoint graphicMultiPoint=new GraphicMultiPoint();
graphicMultiPoint.setPoints(dots);                            //设置坐标点
graphicMultiPoint.setPointSize(10);                           //设置点大小
graphicMultiPoint.setColor(Color.argb(255,255,153,51));       //设置颜色

多点图形.jpg

2 线 Sample详情

(1)实线

//点坐标(地图坐标)
Dot dot1 = new Dot(12697530, 3593327);
Dot dot2 = new Dot(12736224, 3570660);
Dot dot3 = new Dot(12766215, 3612566);
Dot[] dots = {dot1,dot2,dot3};
//创建线图形对象
GraphicPolylin graphicPolylin = new GraphicPolylin();
graphicPolylin.setPoints(dots);                              //设置坐标点集合
graphicPolylin.setLineWidth(5);                              //设置线宽
graphicPolylin.setColor(Color.argb(255,0,0,255));            //设置线颜色
//将线图形添加到覆盖物图层中,并刷新地图
mapView.getGraphicsOverlay().addGraphic(graphicPolylin);
mapView.refresh();

实线图形.jpg

(2)虚线

虚线绘制目前只提供线段形式的。

//创建虚线图形对象,并指定线段两个端点
GraphicStippleLine graphicStippleLine=new GraphicStippleLine(dot1,dot2);
graphicStippleLine.setColor(Color.argb(255, 0, 200, 0));     //设置颜色
graphicStippleLine.setLineWidth(10);                         //设置线宽

虚线.jpg

(3)纹理线

//创建线图形对象
GraphicPolylin graphicPolylin = new GraphicPolylin();
graphicPolylin.setPoints(dots);                      //设置坐标点集合
graphicPolylin.setColor(Color.argb(255,0,0,255));    //设置线颜色
//位图对象
Bitmap bitMap = BitmapCreator.fromAsset(getApplicationContext(), "ico_texture_line.png");
graphicPolylin.setFillTexture(bitMap);               //设置线的填充纹理,要求纹理的宽高为2的幂
graphicPolylin.setLineWidth(bitMap.getHeight());     //设置线宽

纹理线.jpg

3 多边形 Sample详情

多边形即区图形,分为普通区图形(单圈区图形)和带洞区(多圈区图形)。

(1)单圈区

//点坐标(地图坐标)
Dot dot1 = new Dot(12742678.48,3620270.51);
Dot dot2 = new Dot(12754184.19,3595188.06);
Dot dot3 = new Dot(12774664.36,3611065.94);
//点数组(必须闭合:首尾点相同)
Dot[] dotsA = {dot1,dot2,dot3,dot1};
//创建多边形图形对象:单圈区
GraphicPolygon graphicPolygonA = new GraphicPolygon();
graphicPolygonA.setPoints(dotsA);                                //设置坐标点序列
graphicPolygonA.setColor(Color.argb(180,0,0,0));                 //设置填充颜色
graphicPolygonA.setBorderlineColor(Color.argb(255,255,153,51));  //设置边线颜色
graphicPolygonA.setBorderlineWidth(10);                          //设置边线宽

重要说明:在为多边形对象传递Dot点集合时,必须首尾点相同,形成闭合区,才能显示正确。

单圈区图形.jpg

(2)多圈区

以两圈点序列的区图形为例:

//创建多边形图形对象
GraphicPolygon graphicPolygonB = new GraphicPolygon();
//外圈对应dot点
Dot dot11 = new Dot(12709058.79, 3592776.46);
Dot dot12 = new Dot(12728259.52, 3594065.10);
Dot dot13 = new Dot(12744238.65, 3583498.26);
Dot dot14 = new Dot(12731867.71, 3558369.78);
Dot dot15 = new Dot(12703904.23, 3571385.05);
//内圈对应dot点
Dot dot21 = new Dot(12719239.04,3584915.76);
Dot dot22 = new Dot(12728646.11,3580792.12);
Dot dot23 = new Dot(12721687.46,3573446.87);

//外圈dot数组:注意形成闭合圈
Dot[] dots1={dot11,dot12,dot13,dot14,dot15,dot11};
//内圈dot数组:注意形成闭合圈
Dot[] dots2={dot21,dot22,dot23,dot21};

//创建Dots多点序列对象
Dots dotsB=new Dots();
for (int i = 0; i < dots1.length; i++) {
    dotsB.append(dots1[i]);
}
for (int i = 0; i < dots2.length; i++) {
    dotsB.append(dots2[i]);
}

//圈序列(表示一圈中点的个数)
IntList intList=new IntList();
intList.append(dots1.length);   //添加外圈中的点个数
intList.append(dots2.length);   //添加内圈中的点个数

//为区图形设置坐标点
graphicPolygonB.setPoints(dotsB, intList);                        //设置
graphicPolygonB.setColor(Color.argb(180,0,0,0));                  //设置填充颜色
graphicPolygonB.setBorderlineColor(Color.argb(255,255,153,51));   //设置边线颜色
graphicPolygonB.setBorderlineWidth(10);                           //设置边线宽

多圈区图形.jpg

4 圆 Sample详情

//创建圆图形对象
GraphicCircle graphicCircle = new GraphicCircle();
Dot dot = new Dot(12729985, 3606886);                           //地图点坐标
graphicCircle.setCenterAndRadius(dot, 10000);                   //设置圆心和半径
graphicCircle.setColor(Color.argb(180,255,255,255));            //设置填充颜色
graphicCircle.setBorderlineColor(Color.argb(255,255,153,51));   //设置边界线颜色
graphicCircle.setBorderlineWidth(10);                           //设置边界线宽

圆图形.jpg

5 文本 Sample详情

//创建文本对象
GraphicText graphicText = new GraphicText();
Dot dot = new Dot(12737645.2, 3591028.9);             //地图点坐标
graphicText.setPoint(dot);                            //设置位置
graphicText.setText("天兴洲");                         //设置文字
graphicText.setColor(Color.argb(255,255,0,0));        //设置文本颜色
graphicText.setFontSize(40);                          //设置文本字体大小
graphicText.setAnchorPoint(new PointF(0, 0));         //设置文本锚点的位置:文本相对于dot点的位置

说明:锚点坐标(0,0)对应(X,Y),坐标为(0,0)时,文本的左下角和dot重合;锚点为(1,1)时,文本的右上角和dot重合。

文本图形.jpg

6 图像 Sample详情

GraphicImage graphicImage = new GraphicImage();         //创建图像对象
Dot dot = new Dot(12737610.18, 3581849.49);             //地图坐标点
graphicImage.setPoint(dot);                             //设置图像位置
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.trainstation);   //位图对象
graphicImage.setImage(bmp);                             //设置图像
graphicImage.setSlope(true);                            //设置图像样式是否随地图倾斜如果随图倾斜,则表现为贴合地图,否则为竖立效果。
graphicImage.setAnchorPoint(new PointF(0, 0));          //设置图像锚点的位置:锚点作用和文本锚点作用一致

图像.jpg"